/*************************************************
  * 描述：通知提示框私有实现
  *
  * File：cxinoticebox_p.h
  * Author：dongyao@mozihealthcare.cn
  * Date：2025/9/28
  * Update：
  * ************************************************/

#ifndef CXINOTICEBOX_P_H
#define CXINOTICEBOX_P_H
#include <controls/noticebox/cxinoticebox.h>
#include <private/noticebox/cxinoticewidget.h>
class CxiNoticeWidget;
class CxiNoticeBoxPrivate : public QObject
{
	Q_OBJECT
	Q_DISABLE_COPY(CxiNoticeBoxPrivate)
	Q_DECLARE_PUBLIC(CxiNoticeBox)
public:
	explicit CxiNoticeBoxPrivate(CxiNoticeBox* p);
	~CxiNoticeBoxPrivate();

private:
	void init();
	// 显示消息
	void showNotices();
	// 添加消息并显示
	void addNoticeWidget(const NoticeData& data);
	// 重新排列消息位置
	void rearrangeNotices();
	// 移除消息
	void removeNotice(CxiNoticeWidget* widget);
	// 移除全部消息
	void removeAllNotices();
	// 添加消息
	void addNotice(const QString& text, int autoPopDelay, const QString& caption, NoticeType type);
	// 添加确认消息
	void addConfirm(const QString& text, std::function<void()> confirmCallback, int autoPopDelay, const QString& caption, const QString& btnText);
	// 添加MQ消息
	void addMQ(const QVariant& mqData, std::function<void(const QVariant&)> mqClickCallback, std::function<void(const QVariant&)> mqDoubleClickCallback, int autoPopDelay, const QString& caption);
	CxiNoticeBox* q_ptr;
	QList<CxiNoticeWidget*> m_noticeList;// 消息列表
	int m_maxVisibleCount;               // 最大可见消息数
	bool m_allowShowNewMsg;              // 是否允许显示新消息
};


#endif//CXINOTICEBOX_P_H
